package com.topfun.utils;

import java.util.Random;

@SuppressWarnings("unused")
public class MathUtils {
    // ===========================================================
    // Constants
    // ===========================================================

    private static final Random RANDOM = new Random(System.nanoTime());

    // ===========================================================
    // Fields
    // ===========================================================

    // ===========================================================
    // Constructors
    // ===========================================================

    // ===========================================================
    // Getter & Setter
    // ===========================================================

    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================

    // ===========================================================
    // Methods
    // ===========================================================
    
    /**
     * Interval: <code>[pMin, pMax]</code>
     *
     * @param pMin inclusive!
     * @param pMax inclusive!
     * @return random number
     */
    public static int random(final int pMin, final int pMax) {
        return pMin + RANDOM.nextInt((pMax - pMin) + 1);
    }

    /**
     * Interval: <code>[0, pMax)</code>
     *
     * @param pMax exclusive!
     * @return random number
     */
    public static int random(final int pMax) {
        return RANDOM.nextInt(pMax);
    }

    /**
     * Interval: <code>[pMin, pMax]</code>
     *
     * @param pMin inclusive!
     * @param pMax inclusive!
     * @return random number
     */
    public static long random(final long pMin, final long pMax) {
        long random = Math.abs(RANDOM.nextLong());
        return pMin + random % (pMax - pMin + 1);
    }

    /**
     * Interval: <code>[0, pMax)</code>
     *
     * @param pMax exclusive!
     * @return random number
     */
    public static long random(final long pMax) {
        long random = Math.abs(RANDOM.nextLong());
        return random % pMax;
    }

//    public static void main(String[] args){
//        for (int i=0; i<10; i++){
//            System.out.println(random(3L));
//        }
//    }

    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}
